package com.newtouch.bxzs.business.message.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.newtouch.bxzs.business.message.model.NotificationBO;
import com.newtouch.bxzs.business.message.model.NotificationVO;
import com.newtouch.bxzs.business.message.model.bo.*;
import com.newtouch.bxzs.business.message.model.vo.ChangeNotificationStatusVO;
import com.newtouch.bxzs.business.message.model.vo.GetNotificationListVO;
import com.newtouch.bxzs.business.message.model.vo.GetServiceNotificationListVO;

import java.util.List;

/**
 * 通知信息接口
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2020/12/22</td>
 * <td>liman</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author liman
 * @version 1.0.0
 * @since 1.0.0
 */
public interface NotificationService {
    /**
     * 获取通知信息列表
     *
     * @param getNotificationListVO 接收参数类VO
     * @return IPage<AnnouncementBO> 返回通知列表
     */
    IPage<NotificationBO> getPcNotificationList(GetNotificationListVO getNotificationListVO);


    /**
     * 根据通知编号逻辑删除通知信息
     *
     * @param notificationIdList 通知编号
     */
    void deleteNotification(List<String> notificationIdList);

    /**
     * 根据新增、修改通知信息
     *
     * @param notificationVO 通知信息VO
     * @return String 通知id
     */
    String modifyNotification(NotificationVO notificationVO);

    /**
     * 根据编号修改通知状态
     *
     * @param vo 通知状态、通知id
     */
    void changeNotificationStatus(ChangeNotificationStatusVO vo);

    /**
     * 查询app端通知列表
     *
     * @param getNotificationListVO 参数
     * @return AppNotificationBO
     */
    AppNotificationBO getAppNotificationList(GetNotificationListVO getNotificationListVO);

    /**
     * 查询App端业务通知的类型
     *
     * @return AppServiceNotifyTypeListBO
     */
    List<AppServiceNotifyTypeListBO> getAppServiceNotificationTypeList();

    /**
     * 获取App端业务通知列表
     *
     * @param vo 查询参数
     * @return IPage<AppNotificationBO>
     */
    IPage<AppNotificationListBO> getAppServiceNotificationList(GetServiceNotificationListVO vo);

    /**
     * PC端根据通知编号获取通知信息详情
     *
     * @param notificationId 消息id
     * @return 详情
     */
    NotificationDetailBO getPcNotificationDetail(String notificationId);

    /**
     * App端根据通知id获取通知信息详情
     *
     * @param notificationId 通知id
     * @return AppNotificationDetailBO
     */
    AppNotificationDetailBO getAppNotificationDetail(String notificationId);

    /**
     * 将未读通知改为已读
     * @param notificationId 通知id
     */
    void modifyReadStatus(String notificationId);
}
